package com.plian.system.service.fr.audit;


import com.plian.system.dto.fr.audit.AuditReportDTO;
import com.plian.system.entity.fr.audit.AuditReport;
import com.plian.system.model.ObjResult;
import com.plian.system.mybatis.base.BaseService;
import com.plian.system.vo.fr.audit.AuditReportVO;
import com.plian.system.vo.report.ReportReturnVO;

import javax.servlet.http.HttpServletResponse;

/**
 * 内审报告备案管理 服务类
 *
 * @author gangan
 * @since 2019-09-30
 */
public interface IAuditReportService extends BaseService<AuditReport> {

    /**
     * 参数校验
     * @param auditReport
     * @return
     */
    ObjResult checkSubmit(AuditReport auditReport);

    /**
     * 保存或新增,包含子表
     * @param auditReport
     * @return
     */
    Boolean submit(AuditReport auditReport);

    /**
     * 企业内部审计工作情况统计表
     * @param auditReportDTO
     * @return
     */
    ReportReturnVO auditStatistics(AuditReportDTO auditReportDTO);

    /**
     * 企业内部审计工作情况统计表 生成excel文件 并返回文件名  时间戳+"-"+uuid
     * @param auditReportDTO
     * @return
     */
    String exportAuditStatistics(AuditReportDTO auditReportDTO);

    /**
     * 内部审计负责人统计表 生成excel文件 并返回文件名  时间戳+"-"+uuid
     * @param auditReportDTO
     * @return
     */
    String exportAuditContactStatistics(AuditReportDTO auditReportDTO);

    /**
     * 内部审计相关制度统计 生成excel文件 并返回文件名  时间戳+"-"+uuid
     * @param auditReportDTO
     * @return
     */
    String exportAuditSystemStatistics(AuditReportDTO auditReportDTO);

    /**
     *  生成excel文件 并返回文件名  时间戳+"-"+uuid
     * @param auditReportId
     * @return
     */
    String export(Long auditReportId);

    /**
     * 变更
     * @param auditReport
     * @return
     */
    ObjResult change(AuditReport auditReport);

    /**
     * 获取detail obj对象
     * @param auditReportVO
     * @return
     */
    ObjResult getDetailObj(AuditReportVO auditReportVO);

    /**
     * excel文件下载
     * @param key
     * @param response
     */
    void download(String key, HttpServletResponse response);
}
